using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using MakeIT.Framework.Util;
using MakeIT.MakeIT.Laundy.Agromotor.Site.Entidades;
using MakeIT.MakeIT.Laundy.Agromotor.Site.Negocios;

namespace MakeIT.MakeIT.Laundy.Agromotor.Site.Apresentacao
{
	public partial class CadastroPeca : System.Web.UI.Page
	{

		UsuarioVO usuarioVO = null;

		protected void Page_Load(object sender, EventArgs e)
		{
			usuarioVO = (UsuarioVO)this.Session["userActive"];

			if (!IsPostBack)
			{
				Util.HabilitarCampos(false, this.panelCad);
				this.afuCadImagemUpload.Enabled = false;

                List<CategoriaVO> idCategoriaCadVOs = new List<CategoriaVO>();
                CategoriaVO idCategoriaCadVO = CategoriaVO.CreateVO();
                idCategoriaCadVO.idCategoria = -1;
                idCategoriaCadVO.categoria = "";
                idCategoriaCadVOs.Add(idCategoriaCadVO);
                idCategoriaCadVOs.AddRange(AgromotorsiteDAO.getCategorias());
                this.ddlCadIdCategoria.DataSource = idCategoriaCadVOs;
                this.ddlCadIdCategoria.DataBind();

                CategoriaVO idCategoriaVO = CategoriaVO.CreateVO();
                idCategoriaVO.idCategoria = -1;
                idCategoriaVO.categoria = "";
                List<CategoriaVO> idCategoriaVOs = new List<CategoriaVO>();
                idCategoriaVOs.Add(idCategoriaVO);
                idCategoriaVOs.AddRange(AgromotorsiteDAO.getCategorias());
                this.ddlIdCategoria.DataSource = idCategoriaVOs;
                this.ddlIdCategoria.DataBind();
            }

		}

		/// <summary>
		/// Manipula o evento do botão btnSalvar
		/// </summary>
		/// <param name="sender">Objeto disparador do evento</param>
		/// <param name="e">Argumento do evento</param>
		protected void btnSalvar_Click(object sender, EventArgs e)
		{

			//Declara objetos
			PecaVO pecaVO = null;
			bool novoRegistro = false;

			try
			{
				//Verifica se o ID é nulo, se sim = cadastro novo
				if (string.IsNullOrEmpty(this.txtCadIdPeca.Text))
				{
					pecaVO = PecaVO.CreateVO();
					pecaVO.cadastro = DateTime.Now;
					pecaVO.cadastradoPor = usuarioVO.user;

					novoRegistro = true;

				}
				//Recupera dados para serem alterados
				else
				{
					//Recupera dados
					pecaVO = AgromotorsiteDAO.getPeca(Int32.Parse(this.txtCadIdPeca.Text));
				}

				pecaVO.peca = this.txtCadPeca.Text;
				pecaVO.codigo = this.txtCadCodigo.Text;
				pecaVO.loja = this.ddlCadLoja.SelectedValue.Equals("S");
				pecaVO.orcamento = this.ddlCadOrcamento.SelectedValue.Equals("S");
				pecaVO.banner = this.ddlCadBanner.SelectedValue.Equals("S");
                if (this.ddlCadIdCategoria.SelectedValue.Equals("-1"))
                    pecaVO.idCategoria = null;
                else
                    pecaVO.idCategoria = Int32.Parse(this.ddlCadIdCategoria.SelectedValue);
                pecaVO.edicao = DateTime.Now;
				pecaVO.editadoPor = usuarioVO.user;

				//Chama metodo para salvar ou criar novo registro
				if (novoRegistro)
					pecaVO.idPeca = (int)AgromotorsiteDAO.newPeca(pecaVO);
				else
					AgromotorsiteDAO.setPeca(pecaVO);

				// Exibe msg de sucesso ao salvar registro
				Util.ExibeAlert(this, "Registro salvo com sucesso!");

				//Popula grid atualizado
				this.btnPesquisa_Click(null, null);

				//Atualiza formulario, apos salvar os dados
				this.txtCadIdPeca.Text = pecaVO.idPeca.ToString();
				this.ltCadImagemNome.Text = pecaVO.imagemNome;
				this.ltCadImagemMime.Text = pecaVO.imagemMime;
				this.ltCadImagemTamanho.Text = String.Format("{0:n1}", pecaVO.imagemTamanho/1024);
				this.hlCadImagemDownload.NavigateUrl = "~/DownPecaImagem.aspx?idPeca=" + pecaVO.idPeca.ToString()+"&controll="+DateTime.Now.Ticks.ToString();
				this.ltCadastradoPor.Text = pecaVO.cadastradoPor;
				this.ltEditadoPor.Text = pecaVO.editadoPor;
				this.ltDataCadastro.Text = pecaVO.cadastro.ToString("dd/MM/yyyy");
				this.ltDataEdicao.Text = pecaVO.edicao.ToString("dd/MM/yyyy");

				//Habilita botoes do arquivo imagem
				this.btCadImagemRemover.Enabled = true;
				this.afuCadImagemUpload.Enabled = true;
				this.hlCadImagemDownload.Enabled = true;
			}
			catch (Exception ex)
			{

				throw ex;
			}
		}

		/// <summary>
		/// Manipula o evento do botão btnPesquisa
		/// </summary>
		/// <param name="sender">Objeto disparador do evento</param>
		/// <param name="e">Argumento do evento</param>
		protected void btnPesquisa_Click(object sender, EventArgs e)
		{

			//Declara objetos
			int? idPeca = null;
			string peca = null;
			string codigo = null;
			bool? loja = null;
			bool? orcamento = null;
			bool? banner = null;
            int? idCategoria = null;

			try
			{

				if (!string.IsNullOrEmpty(this.txtIdPeca.Text))
				{
					idPeca = Int32.Parse(this.txtIdPeca.Text);
				}

				if (!string.IsNullOrEmpty(this.txtPeca.Text))
				{
					peca = this.txtPeca.Text;
				}

				if (!string.IsNullOrEmpty(this.txtCodigo.Text))
				{
					codigo = this.txtCodigo.Text;
				}

				if(!this.ddlLoja.SelectedValue.Equals(" "))
				{
					loja = this.ddlLoja.SelectedValue.Equals("S");
				}

				if(!this.ddlOrcamento.SelectedValue.Equals(" "))
				{
					orcamento = this.ddlOrcamento.SelectedValue.Equals("S");
				}

				if(!this.ddlBanner.SelectedValue.Equals(" "))
				{
					banner = this.ddlBanner.SelectedValue.Equals("S");
				}

                if (!this.ddlIdCategoria.SelectedValue.Equals("-1"))
                {
                    idCategoria = Int32.Parse(this.ddlIdCategoria.SelectedValue);
                }


				//Recupera a lista de registros segundo a pesquisa
                List<PecaVO> pecaVOs = AgromotorsiteDAO.getPecas(idPeca, peca, idCategoria, codigo, loja, orcamento, banner);
				this.grvResultado.DataSource = pecaVOs;
				this.grvResultado.DataBind();
                this.Session["PecaBusca"] = pecaVOs;
            }
			catch (Exception ex)
			{

				throw ex;
			}
		}
        protected void grvResultadoBusca_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            grvResultado.PageIndex = e.NewPageIndex;
            grvResultado.DataSource = (List<PecaVO>)this.Session["PecaBusca"];
            grvResultado.DataBind();
        }

		/// <summary>
		/// Manipula o evento do botão btnCancelar
		/// </summary>
		/// <param name="sender">Objeto disparador do evento</param>
		/// <param name="e">Argumento do evento</param>
		protected void btnCancelar_Click(object sender, EventArgs e)
		{
			//Volta para a tab page de pesquisa
			//this.tabPeca.ActiveTabIndex = 0;

			// Desabilita os campos para edição
			Util.HabilitarCampos(false, this.panelCad);

			// Destrava botão de edição
			this.btnEditar.Enabled = (!string.IsNullOrEmpty(this.txtCadIdPeca.Text));

			// Destrava botão de exclusao
			this.btnExcluir.Enabled = (!string.IsNullOrEmpty(this.txtCadIdPeca.Text));

			// Detrava botão de novo
			this.btnNovo.Enabled = true;

			// Desabilita o botão salvar
			this.btnSalvar.Enabled = false;

			// Desabilita botões do arquivo imagem
			this.btCadImagemRemover.Enabled = false;
			this.afuCadImagemUpload.Enabled = false;
			this.hlCadImagemDownload.Enabled = (!string.IsNullOrEmpty(this.ltCadImagemNome.Text));

		}

		protected void imgbVisualizar_Click(object sender, ImageClickEventArgs e)
		{
			// Declara objetos
			PecaVO pecaVO = null;
			int idPeca = 0;

			try
			{
				//Recupera os argumentos com o ID do objeto
				string[] argumentos = ((ImageButton)sender).CommandArgument.Split(';');
				idPeca = Int32.Parse(argumentos[0]);

				//Recupera o objeto
				pecaVO = AgromotorsiteDAO.getPeca(idPeca);

				this.txtCadIdPeca.Text = pecaVO.idPeca.ToString();
				this.txtCadPeca.Text = pecaVO.peca;
				this.txtCadCodigo.Text = pecaVO.codigo;
				this.ddlCadLoja.SelectedValue = (pecaVO.loja==null?" ":(pecaVO.loja.Value?"S":"N"));
				this.ddlCadOrcamento.SelectedValue = (pecaVO.orcamento==null?" ":(pecaVO.orcamento.Value?"S":"N"));
				this.ddlCadBanner.SelectedValue = (pecaVO.banner==null?" ":(pecaVO.banner.Value?"S":"N"));
                if (pecaVO.idCategoria == null)
                    this.ddlCadIdCategoria.SelectedValue = "-1";
                else
                    this.ddlCadIdCategoria.SelectedValue = pecaVO.idCategoria.Value.ToString();
                this.ltCadImagemNome.Text = pecaVO.imagemNome;
				this.ltCadImagemMime.Text = pecaVO.imagemMime;
				this.ltCadImagemTamanho.Text = String.Format("{0:n1}", pecaVO.imagemTamanho/1024);
				this.hlCadImagemDownload.NavigateUrl = "~/DownPecaImagem.aspx?idPeca=" + pecaVO.idPeca.ToString()+"&controll="+DateTime.Now.Ticks.ToString();
				this.ltCadastradoPor.Text = pecaVO.cadastradoPor;
				this.ltEditadoPor.Text = pecaVO.editadoPor;
				this.ltDataCadastro.Text = pecaVO.cadastro.ToString("dd/MM/yyyy");
				this.ltDataEdicao.Text = pecaVO.edicao.ToString("dd/MM/yyyy");

				//Habilita tab page do cadastro
				this.tabPeca.ActiveTabIndex = 1;

				//Desabilita campos para edição
				Util.HabilitarCampos(false, this.panelCad);

				//Desabilita botão salvar
				this.btnSalvar.Enabled = false;

				//Habilita botão editar
				this.btnEditar.Enabled = true;

				//Habilita botão excluir
				this.btnExcluir.Enabled = true;

				//Habilita botão novo
				this.btnNovo.Enabled = true;

				// Desabilita botões do arquivo imagem
				this.btCadImagemRemover.Enabled = false;
				this.afuCadImagemUpload.Enabled = false;
				this.hlCadImagemDownload.Enabled = (!string.IsNullOrEmpty(this.ltCadImagemNome.Text));

			}
			catch (Exception ex)
			{

				throw ex;
			}
		}

		// <summary>
		// Manipula o evento editar do web form
		// </summary>
		// <param name="sender">Objeto disparador de evento</param>
		// <param name="e">Argumento do evento</param>
		protected void btnEditar_Click(object sender, EventArgs e)
		{
			// Habilita os campos para edição
			Util.HabilitarCampos(true, this.panelCad);

			// Trava apenas os text box da PK
			this.txtCadIdPeca.Enabled = false;

			// Trava botão de edição
			this.btnEditar.Enabled = false;

			// Trava botão de exclusao
			this.btnExcluir.Enabled = false;

			// Trava botão de novo
			this.btnNovo.Enabled = false;

			// Habilita o botão salvar
			this.btnSalvar.Enabled = true;

			// Habilita botões do arquivo imagem
			this.btCadImagemRemover.Enabled = true;
			this.afuCadImagemUpload.Enabled = true;
			this.hlCadImagemDownload.Enabled = true;

			this.txtCadPeca.Focus();
		}

		protected void btnNovo_Click(object sender, EventArgs e)
		{
			//Limpa formulario, para a entrada de novo registro
			Util.LimparCampos(this.panelCad);
			// Habilita os campos para edição
			Util.HabilitarCampos(true, this.panelCad);

			this.ltCadImagemNome.Text = "";
			this.ltCadImagemMime.Text = "";
			this.ltCadImagemTamanho.Text = "";
			this.ltCadastradoPor.Text = "";
			this.ltEditadoPor.Text = "";
			this.ltDataCadastro.Text = "";
			this.ltDataEdicao.Text = "";

			// Trava apenas os text box da PK
			this.txtCadIdPeca.Enabled = false;

			// Trava botão de edição
			this.btnEditar.Enabled = false;

			// Trava botão de exclusao
			this.btnExcluir.Enabled = false;

			// Trava botão de novo
			this.btnNovo.Enabled = false;

			// Habilita o botão salvar
			this.btnSalvar.Enabled = true;

			// Desabilita botões do arquivo imagem
			this.btCadImagemRemover.Enabled = false;
			this.afuCadImagemUpload.Enabled = false;
			this.hlCadImagemDownload.Enabled = false;

            this.txtCadPeca.Text = "Informe";
            this.txtCadCodigo.Text = "Informe";
            btnSalvar_Click(null, null);

			this.txtCadPeca.Focus();

		}

		protected void btnExcluir_Click(object sender, EventArgs e)
		{
			//Declara objetos
			PecaVO pecaVO = null;

			try
			{
				//Cria objeto
				pecaVO = PecaVO.CreateVO();
				pecaVO.idPeca = Int32.Parse(this.txtCadIdPeca.Text);

				//Chama metodo para excluir registro
				AgromotorsiteDAO.delPeca(pecaVO);

				// Exibe msg de sucesso ao salvar registro
				Util.ExibeAlert(this, "Registro excluido com sucesso!");

				//Popula grid atualizado
				this.btnPesquisa_Click(null, null);

				//Limpa formulario, apos salvar os dados
				Util.LimparCampos(this.panelCad);
				this.ltCadImagemNome.Text = "";
				this.ltCadImagemMime.Text = "";
				this.ltCadImagemTamanho.Text = "";
				this.ltCadastradoPor.Text = "";
				this.ltEditadoPor.Text = "";
				this.ltDataCadastro.Text = "";
				this.ltDataEdicao.Text = "";

				// Trava botão de edição
				this.btnEditar.Enabled = false;

				// Trava botão de exclusao
				this.btnExcluir.Enabled = false;

				// Desabilita o botão salvar
				this.btnSalvar.Enabled = false;

				// Habilita o botao novo
				this.btnNovo.Enabled = true;

				// Desabilita botões do arquivo imagem
				this.btCadImagemRemover.Enabled = false;
				this.afuCadImagemUpload.Enabled = false;
				this.hlCadImagemDownload.Enabled = false;

			}
			catch (Exception ex)
			{

				throw ex;
			}
			
		}
		#region Arquivos
		#region Arquivo Imagem
		protected void ProcessafuCadImagemUpload(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
		{
			// upload do arquivo
			if (afuCadImagemUpload.PostedFile.FileName.Length > 0)
			{
				PecaVO pecaVO = PecaVO.CreateVO();
				pecaVO.idPeca = Int32.Parse(this.txtCadIdPeca.Text);
				pecaVO.imagemMime = afuCadImagemUpload.PostedFile.ContentType;
				pecaVO.imagemNome = afuCadImagemUpload.PostedFile.FileName;

				System.IO.Stream st = afuCadImagemUpload.PostedFile.InputStream;
				pecaVO.imagemTamanho = (int)st.Length;
				byte[] fb = new byte[st.Length];

				fb = afuCadImagemUpload.GetBytesFromStream(st);

                System.Drawing.Image img = Util.byteArrayToImage(fb);
                pecaVO.imagem = Util.imageToByteArray(Util.MaxSize(img, 200, 200));
                img.Dispose();

				pecaVO.edicao = DateTime.Now;
				pecaVO.editadoPor = usuarioVO.user;
				AgromotorsiteDAO.setPecaImagem(pecaVO);

			}

		}
		protected void btCadImagemRemover_Click(object sender, EventArgs e)
		{
			PecaVO pecaVO = PecaVO.CreateVO();
			pecaVO.idPeca = Int32.Parse(this.txtCadIdPeca.Text);
			pecaVO.imagem = null;
			pecaVO.imagemMime = null;
			pecaVO.imagemNome = null;
			pecaVO.imagemTamanho = 0;
			AgromotorsiteDAO.setPecaImagem(pecaVO);
			this.ltCadImagemMime.Text = "";
			this.ltCadImagemNome.Text = "";
			this.ltCadImagemTamanho.Text = "";

			// Exibe msg de sucesso ao salvar registro
			Util.ExibeAlert(this, "Arquivo removido!");
		}

		#endregion
		#endregion

	}
}
